package com.sojson.util.pay.wx.bean;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sojson.base.impl.BaseUtilDto;
import com.sojson.config.exception.TransErrorCode;
import com.sojson.config.exception.bean.Status;
import com.sojson.util.pay.wx.bean.child.response.WxResAmount;
import com.sojson.util.pay.wx.bean.child.response.WxResPayer;
import com.sojson.util.pay.wx.bean.child.response.WxResPromotionDetail;
import com.sojson.util.pay.wx.bean.child.response.WxResResource;
import com.sojson.util.pay.wx.bean.child.response.WxResSceneInfo;

/**
 * 微信V3接口响应Bean
 * 
 * @author liu
 * @date 2021-03-16
 */
public class WxResponseV3 extends BaseUtilDto {

    /***/
    private static final long serialVersionUID = -444894164284969796L;

    /** 二维码链接 */
    private String codeUrl;
    /** 支付跳转链接 */
    private String wapUrl;
    /** 预支付交易会话ID */
    private String prepayId;
    /** 通知ID */
    private String id;
    /** 通知创建时间 */
    private String createTime;
    /** 通知类型 */
    private String eventType;
    /** 通知数据类型 */
    private String resourceType;
    /** 通知数据 */
    private WxResResource resource;
    /** 回调摘要 */
    private String summary;
    /** 应用ID */
    private String appid;
    /** 商户号 */
    private String mchid;
    /** 商户订单号 */
    private String outTradeNo;
    /** 微信支付订单号 */
    private String transactionId;
    /** 交易类型(1.JSAPI:公众号支付,2.NATIVE:扫码支付,3.APP:APP支付,4.MICROPAY:付款码支付,5.MWEB:H5支付,6.FACEPAY:刷脸支付) */
    private String tradeType;
    /** 交易状态 */
    private String tradeState;
    /** 交易状态描述 */
    private String tradeStateDesc;
    /** 付款银行 */
    private String bankType;
    /** 附加数据(在查询API和支付通知中原样返回，可作为自定义参数使用 ) */
    private String attach;
    /** 支付完成时间 */
    private String successTime;
    /** 支付者信息 */
    private WxResPayer payer;
    /** 订单金额 */
    private WxResAmount amount;
    /** 支付场景信息 */
    private WxResSceneInfo sceneInfo;
    /** 优惠信息 */
    private WxResPromotionDetail promotionDetail;
    /** 微信支付退款号 */
    private String refundId;
    /** 商户退款单号 */
    private String outRefundNo;
    /** 退款渠道(1.ORIGINAL:原路退款,2.BALANCE:退回到余额,3.OTHER_BALANCE:原账户异常退到其他余额账户,4.OTHER_BANKCARD:原银行卡异常退到其他银行卡) */
    private String channel;
    /** 退款入账账户 */
    private String userReceivedAccount;
    /** 回调退款状态(1.SUCCESS:退款成功,2.CLOSED:退款关闭,3.PROCESSING:退款处理中,4.ABNORMAL:退款异常) */
    private String refundStatus;
    /** 资金账户(退款所使用资金对应的资金账户类型1.UNSETTLED:未结算资金,2.AVAILABLE:可用余额,3.UNAVAILABLE:不可用余额,4.OPERATION:运营户) */
    private String fundsAccount;
    /** 状态码(退款状态) */
    private String status;
    /** 状态码 */
    private String code;
    /** 状态信息 */
    private String message;
    /** 统一状态Bean */
    private Status cusStatus;

    public WxResponseV3() {}

    /**
     * 成功返回
     * 
     * @param code
     */
    public WxResponseV3(Integer code) {
        this(code, null);
    }

    /**
     * 返回失败
     * 
     * @param code
     * @param msg
     */
    public WxResponseV3(Integer code, String msg) {
        this(new Status(code, msg));
    }

    /**
     * 返回失败
     * 
     * @param transErrorCode
     */
    public WxResponseV3(TransErrorCode transErrorCode) {
        this(new Status(transErrorCode.getCode(), transErrorCode.getMsg()));
    }

    public WxResponseV3(Status status) {
        setCusStatus(status);
    }

    /**
     * 获取状态码(退款状态)
     * 
     * @return
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置状态码(退款状态)
     * 
     * @param status
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     * 获取状态码
     * 
     * @return
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置状态码
     * 
     * @param code
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取状态信息
     * 
     * @return
     */
    public String getMessage() {
        return message;
    }

    /**
     * 设置状态信息
     * 
     * @param message
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 获取预支付交易会话ID
     * 
     * @return
     */
    public String getPrepayId() {
        return prepayId;
    }

    /**
     * 设置预支付交易会话ID
     * 
     * @param prepayId
     */
    @JsonProperty("prepay_id")
    @JSONField(name = "prepay_id")
    public void setPrepayId(String prepayId) {
        this.prepayId = prepayId;
    }

    /**
     * 获取二维码链接
     * 
     * @return
     */
    public String getCodeUrl() {
        return codeUrl;
    }

    /**
     * 设置二维码链接
     * 
     * @param codeUrl
     */
    @JsonProperty("code_url")
    @JSONField(name = "code_url")
    public void setCodeUrl(String codeUrl) {
        this.codeUrl = codeUrl;
    }

    /**
     * 获取支付跳转链接
     * 
     * @return
     */
    public String getWapUrl() {
        return wapUrl;
    }

    /**
     * 设置支付跳转链接
     * 
     * @param wapUrl
     */
    @JsonProperty("h5_url")
    @JSONField(name = "h5_url")
    public void setWapUrl(String wapUrl) {
        this.wapUrl = wapUrl;
    }

    /**
     * 获取通知ID
     * 
     * @return
     */
    public String getId() {
        return id;
    }

    /**
     * 设置通知ID
     * 
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取通知创建时间
     * 
     * @return
     */
    public String getCreateTime() {
        return createTime;
    }

    /**
     * 设置通知创建时间
     * 
     * @param createTime
     */
    @JsonProperty("create_time")
    @JSONField(name = "create_time")
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取通知类型
     * 
     * @return
     */
    public String getEventType() {
        return eventType;
    }

    /**
     * 设置通知类型
     * 
     * @param eventType
     */
    @JsonProperty("event_type")
    @JSONField(name = "event_type")
    public void setEventType(String eventType) {
        this.eventType = eventType;
    }

    /**
     * 获取通知数据类型
     * 
     * @return
     */
    public String getResourceType() {
        return resourceType;
    }

    /**
     * 设置通知数据类型
     * 
     * @param resourceType
     */
    @JsonProperty("resource_type")
    @JSONField(name = "resource_type")
    public void setResourceType(String resourceType) {
        this.resourceType = resourceType;
    }

    /**
     * 获取通知数据
     * 
     * @return
     */
    public WxResResource getResource() {
        return resource;
    }

    /**
     * 设置通知数据
     * 
     * @param resource
     */
    public void setResource(WxResResource resource) {
        this.resource = resource;
    }

    /**
     * 获取回调摘要
     * 
     * @return
     */
    public String getSummary() {
        return summary;
    }

    /**
     * 设置回调摘要
     * 
     * @param summary
     */
    public void setSummary(String summary) {
        this.summary = summary;
    }

    /**
     * 获取应用ID
     * 
     * @return
     */
    public String getAppid() {
        return appid;
    }

    /**
     * 设置应用ID
     * 
     * @param appid
     */
    public void setAppid(String appid) {
        this.appid = appid;
    }

    /**
     * 获取商户号
     * 
     * @return
     */
    public String getMchid() {
        return mchid;
    }

    /**
     * 设置商户号
     * 
     * @param mchid
     */
    public void setMchid(String mchid) {
        this.mchid = mchid;
    }

    /**
     * 获取商户订单号
     * 
     * @return
     */
    public String getOutTradeNo() {
        return outTradeNo;
    }

    /**
     * 设置商户订单号
     * 
     * @param outTradeNo
     */
    @JsonProperty("out_trade_no")
    @JSONField(name = "out_trade_no")
    public void setOutTradeNo(String outTradeNo) {
        this.outTradeNo = outTradeNo;
    }

    /**
     * 获取微信支付订单号
     * 
     * @return
     */
    public String getTransactionId() {
        return transactionId;
    }

    /**
     * 设置微信支付订单号
     * 
     * @param transactionId
     */
    @JsonProperty("transaction_id")
    @JSONField(name = "transaction_id")
    public void setTransactionId(String transactionId) {
        this.transactionId = transactionId;
    }

    /** 获取交易类型(1.JSAPI:公众号支付,2.NATIVE:扫码支付,3.APP:APP支付,4.MICROPAY:付款码支付,5.MWEB:H5支付,6.FACEPAY:刷脸支付) */
    public String getTradeType() {
        return tradeType;
    }

    /** 设置交易类型(1.JSAPI:公众号支付,2.NATIVE:扫码支付,3.APP:APP支付,4.MICROPAY:付款码支付,5.MWEB:H5支付,6.FACEPAY:刷脸支付) */
    @JsonProperty("trade_type")
    @JSONField(name = "trade_type")
    public void setTradeType(String tradeType) {
        this.tradeType = tradeType;
    }

    /**
     * 获取交易状态
     * 
     * @return
     */
    public String getTradeState() {
        return tradeState;
    }

    /**
     * 设置交易状态
     * 
     * @param tradeState
     */
    @JsonProperty("trade_state")
    @JSONField(name = "trade_state")
    public void setTradeState(String tradeState) {
        this.tradeState = tradeState;
    }

    /**
     * 获取交易状态描述
     * 
     * @return
     */
    public String getTradeStateDesc() {
        return tradeStateDesc;
    }

    /**
     * 设置交易状态描述
     * 
     * @param tradeStateDesc
     */
    @JsonProperty("trade_state_desc")
    @JSONField(name = "trade_state_desc")
    public void setTradeStateDesc(String tradeStateDesc) {
        this.tradeStateDesc = tradeStateDesc;
    }

    /** 获取付款银行 */
    public String getBankType() {
        return bankType;
    }

    /** 设置付款银行 */
    @JsonProperty("bank_type")
    @JSONField(name = "bank_type")
    public void setBankType(String bankType) {
        this.bankType = bankType;
    }

    /**
     * 获取附加数据(在查询API和支付通知中原样返回，可作为自定义参数使用 )
     * 
     * @return
     */
    public String getAttach() {
        return attach;
    }

    /**
     * 设置附加数据(在查询API和支付通知中原样返回，可作为自定义参数使用 )
     * 
     * @param attach
     */
    public void setAttach(String attach) {
        this.attach = attach;
    }

    /**
     * 获取支付完成时间
     * 
     * @return
     */
    public String getSuccessTime() {
        return successTime;
    }

    /**
     * 设置支付完成时间
     * 
     * @param successTime
     */
    @JsonProperty("success_time")
    @JSONField(name = "success_time")
    public void setSuccessTime(String successTime) {
        this.successTime = successTime;
    }

    /** 获取支付者信息 */
    public WxResPayer getPayer() {
        return payer;
    }

    /** 设置支付者信息 */
    public void setPayer(WxResPayer payer) {
        this.payer = payer;
    }

    /**
     * 获取订单金额
     * 
     * @return
     */
    public WxResAmount getAmount() {
        return amount;
    }

    /**
     * 设置订单金额
     * 
     * @param amount
     */
    public void setAmount(WxResAmount amount) {
        this.amount = amount;
    }

    /** 获取支付场景信息 */
    public WxResSceneInfo getSceneInfo() {
        return sceneInfo;
    }

    /** 设置支付场景信息 */
    @JsonProperty("scene_info")
    @JSONField(name = "scene_info")
    public void setSceneInfo(WxResSceneInfo sceneInfo) {
        this.sceneInfo = sceneInfo;
    }

    /** 获取优惠信息 */
    public WxResPromotionDetail getPromotionDetail() {
        return promotionDetail;
    }

    /** 设置优惠信息 */
    @JsonProperty("promotion_detail")
    @JSONField(name = "promotion_detail")
    public void setPromotionDetail(WxResPromotionDetail promotionDetail) {
        this.promotionDetail = promotionDetail;
    }

    /** 获取微信支付退款号 */
    public String getRefundId() {
        return refundId;
    }

    /** 设置微信支付退款号 */
    @JsonProperty("refund_id")
    @JSONField(name = "refund_id")
    public void setRefundId(String refundId) {
        this.refundId = refundId;
    }

    /** 获取商户退款单号 */
    public String getOutRefundNo() {
        return outRefundNo;
    }

    /** 设置商户退款单号 */
    @JsonProperty("out_refund_no")
    @JSONField(name = "out_refund_no")
    public void setOutRefundNo(String outRefundNo) {
        this.outRefundNo = outRefundNo;
    }

    /** 获取退款渠道(1.ORIGINAL:原路退款,2.BALANCE:退回到余额,3.OTHER_BALANCE:原账户异常退到其他余额账户,4.OTHER_BANKCARD:原银行卡异常退到其他银行卡) */
    public String getChannel() {
        return channel;
    }

    /** 设置退款渠道(1.ORIGINAL:原路退款,2.BALANCE:退回到余额,3.OTHER_BALANCE:原账户异常退到其他余额账户,4.OTHER_BANKCARD:原银行卡异常退到其他银行卡) */
    public void setChannel(String channel) {
        this.channel = channel;
    }

    /** 获取退款入账账户 */
    public String getUserReceivedAccount() {
        return userReceivedAccount;
    }

    /** 设置退款入账账户 */
    @JsonProperty("user_received_account")
    @JSONField(name = "user_received_account")
    public void setUserReceivedAccount(String userReceivedAccount) {
        this.userReceivedAccount = userReceivedAccount;
    }

    /**
     * 获取回调退款状态(1.SUCCESS:退款成功,2.CLOSED:退款关闭,3.PROCESSING:退款处理中,4.ABNORMAL:退款异常)
     * 
     * @return
     */
    public String getRefundStatus() {
        return refundStatus;
    }

    /**
     * 设置回调退款状态(1.SUCCESS:退款成功,2.CLOSED:退款关闭,3.PROCESSING:退款处理中,4.ABNORMAL:退款异常)
     * 
     * @param status
     */
    @JsonProperty("refund_status")
    @JSONField(name = "refund_status")
    public void setRefundStatus(String refundStatus) {
        this.refundStatus = refundStatus;
    }

    /** 获取资金账户(退款所使用资金对应的资金账户类型1.UNSETTLED:未结算资金,2.AVAILABLE:可用余额,3.UNAVAILABLE:不可用余额,4.OPERATION:运营户) */
    public String getFundsAccount() {
        return fundsAccount;
    }

    /** 设置资金账户(退款所使用资金对应的资金账户类型1.UNSETTLED:未结算资金,2.AVAILABLE:可用余额,3.UNAVAILABLE:不可用余额,4.OPERATION:运营户) */
    @JsonProperty("funds_account")
    @JSONField(name = "funds_account")
    public void setFundsAccount(String fundsAccount) {
        this.fundsAccount = fundsAccount;
    }

    /**
     * 获取统一状态Bean
     * 
     * @return
     */
    public Status getCusStatus() {
        return cusStatus;
    }

    /**
     * 设置统一状态Bean
     * 
     * @param status
     */
    public void setCusStatus(Status cusStatus) {
        this.cusStatus = cusStatus;
    }

}